package com.shundr.shipper.user.util;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.os.Handler;

import com.shundr.shipper.common.util.PrefConstants;
import com.shundr.shipper.common.util.PrefUtils;
import com.shundr.shipper.frame.constant.LContext;
import com.shundr.shipper.frame.service.PusherManager;
import com.shundr.shipper.frame.util.StringUtil;
import com.shundr.shipper.user.dao.UserDao;
import com.shundr.shipper.user.http.UserRequest;
import com.shundr.shipper.user.model.UserInfo;

/**
 * user工具类
 * UserUtil
 * 
 * @author larry 2015-4-20 下午6:10:40 
 * @version 1.0.0
 *
 */
public class UserUtil {
	/**
	 * 用户操作类
	 */
	public static List<UserListener> mUserListeners = new ArrayList<UserListener>();
	
	/**
	 * 将登录成功后的user缓存到本地
	 * saveUserToLocal(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param context
	 * void
	 * @exception
	 * @since  1.0.0
	 */
	public static void saveUserToLocal(Context context,UserInfo info,String token){
		if(info == null)
			return;
		try {
			LContext.userInfo = info;
			LContext.USER_ID = info.getUserId();
			new UserDao().insert(info);
			if(!StringUtil.isNull(token)){
				PrefUtils.setPrefString(context, PrefConstants.ACCESS_TOKEN, token);
				LContext.ACCESS_TOKEN = token;
			}
			PrefUtils.setPrefInt(context, PrefConstants.USER_ID, info.getUserId());
			//注册推送监听
			new PusherManager(context).setAlias(null, info.getUserId() + "");
			for(UserListener listener : mUserListeners){
				listener.onUserChanged(0);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 保存修改后的手机号
	 * @param context
	 * @param userPhone
	 */
	public static void saveUserPhone(Context context,String userPhone){
		try {
			if(!StringUtil.isNull(userPhone)){
				new UserDao().updateUserPhone(LContext.USER_ID,userPhone);
				LContext.userInfo.setUserPhone(userPhone);
				for(UserListener listener : mUserListeners){
					listener.onUserChanged(0);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 注销用户
	 * logout(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param context
	 * void
	 * @exception
	 * @since  1.0.0
	 */
	public static void logout(Context context){
		LContext.ACCESS_TOKEN = "";
		LContext.USER_ID = 0;
		LContext.userInfo = null;
//		new UserDao().insert(LContext.userInfo);
		PrefUtils.setPrefInt(context, PrefConstants.USER_ID, 0);
		PrefUtils.setPrefString(context, PrefConstants.USER_NAME, "");
		PrefUtils.setPrefString(context, PrefConstants.USER_PASSWORD, "");
		PrefUtils.setPrefString(context, PrefConstants.ACCESS_TOKEN, "");
		new UserRequest(context, new Handler()).logout();
		//取消推送监听
		new PusherManager(context).setAlias(null, "");
		for(UserListener listener : mUserListeners){
			listener.onUserChanged(1);
		}
	}
	
}
